package allaboutmybook;

import java.util.LinkedList;

import dao.DAOConcretoPersonagensLivro;
import dao.DAOPersonagensLivro;
import excecoes.CampoImportanteEmBrancoException;
import excecoes.ChaveJaExisteException;
import excecoes.DAOException;

public class GerenteConcretoPersonagensDoLivro implements GerentePersonagensDoLivro
{
	private DAOPersonagensLivro daoPersonagens;
	private static volatile GerenteConcretoPersonagensDoLivro singleton;
	
	
	
	private GerenteConcretoPersonagensDoLivro()
	{
		daoPersonagens = new DAOConcretoPersonagensLivro();
	}
	
	public static synchronized GerenteConcretoPersonagensDoLivro getInstance()
	{
		if(singleton == null)
		{
			singleton = new GerenteConcretoPersonagensDoLivro();
		}
		
		return singleton;
	}

	@Override
	public PersonagemLivro pegarPersonagemLivro(String nomePersonagem) throws DAOException 
	{
		return daoPersonagens.pegarPersonagemLivro(nomePersonagem);
		
	}

	@Override
	public LinkedList<String> pegarNomesPersonagens() throws DAOException
	{
		return daoPersonagens.pegarNomesPersonagens();
	}

	@Override
	public void apagarPersonagemDaLista(String nomePersonagem) throws DAOException
	{
		System.out.println("<><><><>nome personagem no gerente concreto:" + nomePersonagem);
		daoPersonagens.apagarPersonagemDaLista(nomePersonagem);
		
	}

	@Override
	public void adicionarPersonagemParaLista(String nomePersonagem,
			String descricaoPersonagem) throws DAOException, ChaveJaExisteException, CampoImportanteEmBrancoException
	{
		if(nomePersonagem == null || nomePersonagem.length() <= 0)
		{
			throw new CampoImportanteEmBrancoException();
		}
		else
		{
			daoPersonagens.adicionarPersonagemParaLista(nomePersonagem, descricaoPersonagem);
		}
		
	}
	public void editarPersonagemDaLista(String nomePersonagem, String descricaoPersonagem) throws DAOException, CampoImportanteEmBrancoException
	{
		if(nomePersonagem == null || nomePersonagem.length() <= 0)
		{
			throw new CampoImportanteEmBrancoException();
		}
		else
		{
			daoPersonagens.editarPersonagemDaLista(nomePersonagem, descricaoPersonagem);
		}
	}
	
	
	

}
